"""
QQ儿歌播放器单元测试套件
"""
import unittest
import os
import tempfile
import shutil

class TestPlayer(unittest.TestCase):
    """音频播放模块单元测试"""
    def setUp(self):
        # 创建临时资源目录
        self.test_dir = tempfile.mkdtemp()
        self.resources_dir = os.path.join(self.test_dir, 'resources')
        os.makedirs(self.resources_dir)
        
        # 创建测试歌曲文件
        self.test_song = os.path.join(self.resources_dir, 'test.mp3')
        with open(self.test_song, 'w') as f:
            f.write('dummy audio data')
        
        # 创建测试歌词文件
        self.test_lrc = os.path.join(self.resources_dir, 'test.lrc')
        with open(self.test_lrc, 'w', encoding='utf-8') as f:
            f.write('''[00:10]测试歌词
[00:15]这是测试歌词
[00:20]缓存测试歌词''')
    
    def tearDown(self):
        # 清理临时目录
        shutil.rmtree(self.test_dir)
    
    def test_加载歌曲(self):
        """测试歌曲加载功能"""
        player = 音频播放器()
        result = player.加载歌曲(self.test_song)
        self.assertTrue(result)
        self.assertEqual(player.mediaStatus(), QMediaPlayer.LoadedMedia)
    
    def test_歌词解析(self):
        """测试歌词解析功能"""
        player = 音频播放器()
        player.加载歌曲(self.test_song)
        
        # 测试歌词数量
        self.assertEqual(len(player.当前歌词), 3)
        
        # 测试歌词内容
        self.assertEqual(player.当前歌词[0], '测试歌词')
        self.assertEqual(player.当前歌词[1], '这是测试歌词')
        
        # 测试无歌词情况
        os.remove(self.test_lrc)
        player.加载歌词(self.test_song)
        self.assertIn('无歌词文件', player.当前歌词[0])

class TestPlaylist(unittest.TestCase):
    """歌曲列表模块单元测试"""
    def setUp(self):
        self.test_dir = tempfile.mkdtemp()
        self.resources_dir = os.path.join(self.test_dir, 'resources')
        os.makedirs(self.resources_dir)
    
    def tearDown(self):
        shutil.rmtree(self.test_dir)
    
    def test_文件拖拽(self):
        """测试文件拖拽功能"""
        playlist = 歌曲列表组件()
        
        # 模拟MP3文件路径
        test_mp3 = os.path.join(self.test_dir, 'test.mp3')
        with open(test_mp3, 'w') as f:
            f.write('dummy audio data')
        
        # 测试有效文件添加
        filename = playlist.拖拽添加歌曲(test_mp3)
        self.assertEqual(filename, 'test.mp3')
        self.assertTrue(os.path.exists(os.path.join(self.resources_dir, 'test.mp3')))
        
    def test_无效文件(self):
        """测试无效文件处理"""
        playlist = 歌曲列表组件()
        
        # 模拟TXT文件路径
        test_txt = os.path.join(self.test_dir, 'test.txt')
        with open(test_txt, 'w') as f:
            f.write('this is a test file')
        
        # 测试无效文件处理
        filename = playlist.拖拽添加歌曲(test_txt)
        self.assertIsNone(filename)

if __name__ == '__main__':
    unittest.main()